The need for a logical way to organize and control revisions has existed for almost as long as writing has been in existence. However, revision control has become much more important, and complicated, with the advent of computer programs.
Large modern software development projects are often developed from complex designs. Often, a software development project can become very complex as the design evolves from the prototype stage to the fully fledged commercialization of the software project. Thus, when developers write code based upon a complex design, errors are inevitable. Often, the complexity of the design increases as the software moves from prototyping to commercialization because of additional functionality that is incorporated into the prototype, or oversights and shortcomings in the design that become apparent to designers and developers over time. Therefore, revision control has become increasingly important for software development.
Some of the most capable, and most complex, revision control systems are those used in software development. Often, an entire development team has access to and may change a piece of software that is being developed. Therefore, software developers sometimes use revision control software to maintain documentation and configuration files, as well as source code. As changes are made to a program, a changeset is generated that documents what changes were made. A changeset is a group of changes grouped by a period of time, such as a day or a short period when the code has been checked in and out of a source code management system. A changeset can comprise changes from a single developer or group of developers.
Typically, computer programs are written using specific programming languages. All programming languages have some primitive building blocks for the description of data and the processes or transformations applied to them (like the addition of two numbers or the selection of an item from a collection). These primitive building blocks are defined by sets of syntactic and semantic rules which describe their structure and meaning respectively.
Often, computer programs communicate with and work in conjunction with other computer programs. Therefore, a change in the functioning of one program can adversely affect the functioning of other programs and lead to program reversions. If the programs are written in the same program language it may be possible to identify the change that caused the reversion. However, if the programs are written in different languages, then it can become far more difficult to identify the source of the reversion.